package util.linkedList;

/**
 * @Author Huzzah
 * @Created 2021-10-09 17:49
 */
public interface LinkedList<T> {
    /**
     * 节点长度
     * @return
     */
    int size();

    /**
     * 返回链表是否为空
     * @return 空:true | 非空:false
     */
    boolean isEmpty();

    /**
     * 获取第index位置的节点的值
     * @param index
     * @return
     */
    T get(int index);

    /**
     * 获取第1个节点的值
     * @return
     */
    T getFirst();

    /**
     * 获取最后一个节点的值
     * @return
     */
    T getLast();

    /**
     * 将节点插入到第index位置之前
     * @param index
     * @param data 数据
     */
    void insert(int index, T data);

    /**
     * 将节点插入第一个节点处
     * @param data 数据
     */
    void insertFirst(T data);

    /**
     * 将节点追加到链表的末尾
     * @param data
     */
    void append(T data);

    /**
     * 删除index位置的节点
     * @param index
     */
    void del(int index);

    /**
     * 删除第一个节点
     */
    void deleteFirst();

    /**
     * 删除最后一个节点
     */
    void deleteLast();


}
